مقالات > کارگاه شبکه عملگرهاي Pivot و Unpivot در اوراکل 11g
 
اموزش بانک اطلاعاتی
اموزش گام به گام بانک اطلاعاتی
 
 

 

 

عملگر PIVOT
عملگر PIVOT داده‌ها را در رديف‌هاي مجزا دريافت کرده و با هم جمع مي‌کند، سپس نتيجه را در ستون‌هاي مجاور هم نمايش مي‌دهد. براي ديدن عملکرد دقيق عملگر PIVOT، بايد ابتدا با استفاده از کدفهرست 1 يک جدول ايجاد کرده و چند رکورد را در آن درج کنيد.

 

 



CREATE TABLE pivot_test (
  id            NUMBER,
  customer_id   NUMBER,
  product_code  VARCHAR2(5),
  quantity      NUMBER
);
INSERT INTO pivot_test VALUES (1, 1, ‹A›, 10);
INSERT INTO pivot_test VALUES (2, 1, ‹B›, 20);
INSERT INTO pivot_test VALUES (3, 1, ‹C›, 30);
INSERT INTO pivot_test VALUES (4, 2, ‹A›, 40);
INSERT INTO pivot_test VALUES (5, 2, ‹C›, 50);
INSERT INTO pivot_test VALUES (6, 3, ‹A›, 60);
INSERT INTO pivot_test VALUES (7, 3, ‹B›, 70);
INSERT INTO pivot_test VALUES (8, 3, ‹C›, 80);
INSERT INTO pivot_test VALUES (9, 3, ‹D›, 90);
INSERT INTO pivot_test VALUES (10, 4, ‹A›, 100);
COMMIT;

 

 

فهرست 1

 

 


با اجراي کد فوق ده رکورد در جدول ذخيره مي‌شود و مي‌توان با استفاده از کد فهرست 2 داده‌هاي ذخيره شده در جدول را مشاهده كرد.

 

 



SELECT * FROM pivot_test;

        ID CUSTOMER_ID PRODU   QUANTITY
---------- ----------- ----- ----------
         1           1 A             10
         2           1 B             20
         3           1 C             30
         4           2 A             40
         5           2 C             50
         6           3 A             60
         7           3 B             70
         8           3 C             80
         9           3 D             90
        10           4 A            100

10 rows selected.

SQL>

 

 

فهرست 2

 

 

 

عملگر PIVOT در حالت پايه، عملکرد محدودي دارد. ما مجبور هستيم تا مقاديري را که مي‌خواهيم چرخانده شده و از رديف‌هاي ستون‌ مورد نظر به نام ستون‌هاي ما تبديل شوند، دقيقاً مشخص کنيم. به همين دليل، بايد دقيقاً مقاديري از ستون مورد نظر را که قرار است از ستون به نام سطر تبديل شوند، مطابق با کد فهرست 3 و استفاده از عبارت IN مشخص کنيم.

 

 


SELECT *
FROM   (SELECT product_code, quantity
        FROM   pivot_test)
PIVOT  (SUM(quantity) AS sum_quantity FOR (product_code) IN (‹A› AS a, ‹B› AS b, ‹C› AS c));

A_SUM_QUANTITY B_SUM_QUANTITY C_SUM_QUANTITY
-------------- -------------- --------------
           210             90            160
1 row selected.
SQL>

 

 

فهرست 3

 

 

 

 

 

همان‌طور که مشاهده مي‌شود، در خروجي پرس‌وجوي فوق مقادير مشخص شده از ستون کد محصول، يعني رکوردهاي با مقدار A و B و C به ستون‌هاي جدول تبديل شده‌اند و جمع محصول فروخته شده به ازاي هر يک از اين محصولات در يک سطر از خروجي پرس‌وجو قرار مي‌گيرد. اگر مي‌خواهيد اين نتيجه را خرد کرده و جمع فروش هر محصول را به ازاي هر مشتري داشته‌باشيد، کافي است تا به سادگي نام ستون CUSTOMER_ID را به پارامتر‌هاي عملگر SELECT اضافه کنيد. کد حاصل و خروجي آن به شکل فهرست 4 خواهد بود.

 

 


SELECT *
FROM   (SELECT customer_id, product_code, quantity
        FROM   pivot_test)
PIVOT  (SUM(quantity) AS sum_quantity FOR (product_code) IN (‹A› AS a, ‹B› AS b, ‹C› AS c))
ORDER BY customer_id;

CUSTOMER_ID A_SUM_QUANTITY B_SUM_QUANTITY C_SUM_QUANTITY
----------- -------------- -------------- --------------
          1             10             20             30
          2             40                            50
          3             60             70             80
          4            100

4 rows selected.

SQL>

 

 

فهرست4

 

 

 

 

 

افزودن کلمه کليدي XML به عملگر PIVOT به ما امکان مي‌دهد تا نتايج چرخانده‌شده حاصل از عملگر PIVOT را نه به صورت خروجي استاندارد عملگر SQL، بلکه به فرمت و ساختار XML در اختيار داشته‌باشيم. اين کار همچنين عملگر PIVOT را انعطاف‌پذير‌تر مي‌کند. به اين ترتيب، در اين حالت ديگر مجبور نيستيد مقادير مشخصي از ستون مورد نظر را به صورت Hard-code در قسمت IN مشخص کنيد، بلکه مي‌توانيد در برابر اين عملگر از يک زيرپرس‌وجو(sub Query) يا عملگر ANY استفاده کنيد، دو نمونه كد براي نمايش نحوه تركيب عملگر PIVOT با XML  در سايت مجله قرار داده شده است. مطابق با حالت معمولي PIVOT در حالت XML‌ نيز مي‌توان نتايج پرس‌وجو را به ازاي هر مشتري تفکيک کرد، به اين ترتيب، به ازاي هر کد مشتري، يک فايل XML مجزا، شامل تعداد فروخته شده از هر محصول به آن مشتري توليد مي‌شود. كدهاي مورد نياز براي ايجاد يك فايل XML مجزا براي هر مشتري نيز در سايت مجله آورده شده است.

 عملگر UNPIVOT
عملگر UNPIVOT بر خلاف عملگر قبلي بوده و داده‌هاي ستوني را در سطرهاي مجزا ذخيره مي‌کند، براي مشاهده نتيجه عملگر UNPIVOT با استفاده از کد فهرست 5 يک جدول ايجاد کرده و 4 رکورد در آن درج کنيد.

 

 



CREATE TABLE unpivot_test (
  id              NUMBER,
  customer_id     NUMBER,
  product_code_a  NUMBER,
  product_code_b  NUMBER,
  product_code_c  NUMBER,
  product_code_d  NUMBER
);

INSERT INTO unpivot_test VALUES (1, 101, 10, 20, 30, NULL);
INSERT INTO unpivot_test VALUES (2, 102, 40, NULL, 50, NULL);
INSERT INTO unpivot_test VALUES (3, 103, 60, 70, 80, 90);
INSERT INTO unpivot_test VALUES (4, 104, 100, NULL, NULL, NULL);
COMMIT;

 

 

فهرست 5

 

 


داده‌هاي جدول فهرست 5  فوق مطابق با خروجي پرس‌وجوي فهرست 6 قابل مشاهده است.

 

 



SELECT * FROM unpivot_test;

        ID CUSTOMER_ID PRODUCT_CODE_A PRODUCT_CODE_B PRODUCT_CODE_C PRODUCT_CODE_D
---------- ----------- -------------- -------------- -------------- --------------
         1         101             10             20             30
         2         102             40                            50
         3         103             60             70             80             90
         4         104            100

4 rows selected.

SQL>

 

 

فهرست 6

 

 


عملگر UNPIVOT داده‌هايي را که به صورت ستوني ذخيره‌شده‌اند، در رديف‌هاي مجزا، نمايش مي‌دهد همانند فهرست 7.

 

 



SELECT *
FROM   unpivot_test
UNPIVOT (quantity FOR product_code IN (product_code_a AS ‹A›, product_code_b AS ‹B›, product_code_c AS ‹C›, product_code_d AS ‹D›));

        ID CUSTOMER_ID P   QUANTITY
---------- ----------- - ----------
         1         101 A         10
         1         101 B         20
         1         101 C         30
         2         102 A         40
         2         102 C         50
         3         103 A         60
         3         103 B         70
         3         103 C         80
         3         103 D         90
         4         104 A        100

10 rows selected.

SQL>

 

 

فهرست 7

 

 


هنگام استفاده از اين عبارت، بايد نكته‌هاي زير را در نظر داشت:
  نام‌هاي مورد نياز براي ستون‌ها که در اين مورد عبارت‌هاي QUANTITY و PRODUCT_CODE است، در قسمت مرتبط با عبارت UNPIVOT تعريف شده‌اند. اين عبارت‌ها را مي‌توان با هر نامي که در حال حاضر در جدول مورد پردازش وجود نداشته‌باشد، جايگزين کرد.

 

 

 

 

 

SELECT *
FROM   unpivot_test
UNPIVOT INCLUDE NULLS (quantity FOR product_code IN (product_code_a AS ‹A›, product_code_b AS ‹B›, product_code_c AS ‹C›, product_code_d AS ‹D›));

        ID CUSTOMER_ID P   QUANTITY
---------- ----------- - ----------
         1         101 A         10
         1         101 B         20
         1         101 C         30
         1         101 D
         2         102 A         40
         2         102 B
         2         102 C         50
         2         102 D
         3         103 A         60
         3         103 B         70
         3         103 C         80      
         3         103 D         90
         4         104 A        100
         4         104 B
         4         104 C
         4         104 D

16 rows selected.

SQL>

 

 

فهرست 8

 

 


  ستون‌هايي را که مي‌خواهيم از حالت ستوني به سطر تبديل شوند بايد در قسمت عبارت IN قرار دهيم.  مقادير رکوردها در ستون PRODUCT_CODE با نام ستون‌ يا ستون‌هايي که به رکورد تبديل شده‌اند، متناسب خواهد بود مگر آن‌که براي آن‌ها از نام مستعار استفاده کنيد.  به صورت پيش‌فرض اين کد شامل عملگر EXCLUDE NULLS است. مي‌توانيد با استفاده از عملگر INCLUDE NULLS مقادير NULL را نيز به رکوردهايي با مقدار NULL به ازاي ستون مورد نظر، تبديل کنيد.در كد فهرست 8 نحوه استفاده از INCLUDE NULLS را در يك پرس‌وجو مشاهده مي‌كنيد.

 

 


 

 


نظرات شما عزیزان:

نام :
آدرس ایمیل:
وب سایت/بلاگ :
متن پیام:
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

 

 

 

عکس شما

آپلود عکس دلخواه:






ارسال شده در تاریخ : دو شنبه 14 فروردين 1391برچسب:, :: 22:13 :: توسط : عماد عزیزی

درباره وبلاگ
به وبلاگ من خوش آمدید
آخرین مطالب
آرشيو وبلاگ
نويسندگان
پيوندها

 

تبادل لینک هوشمند
برای تبادل لینک ابتدا ما را با عنوان اموزش بانک اطلاعاتی و آدرس amoozesh-database.LXB.ir لینک نمایید سپس مشخصات لینک خود را در زیر نوشته . در صورت وجود لینک ما در سایت شما لینکتان به طور خودکار در سایت ما قرار میگیرد.







نام :
وب :
پیام :
2+2=:
(Refresh)

خبرنامه وب سایت:





آمار وب سایت:
 

بازدید امروز : 37
بازدید دیروز : 32
بازدید هفته : 71
بازدید ماه : 69
بازدید کل : 89381
تعداد مطالب : 14
تعداد نظرات : 1
تعداد آنلاین : 1



خبرنامه وبلاگ:

برای ثبت نام در خبرنامه ایمیل خود را وارد نمایید





كد تقويم

Untitled Document
دریافت کد خوش آمدگویی